#pragma once

#include "Tests.h"
#include "KnowledgeBaseInterpreter.h"

namespace TestKnowledgeBaseInterpreter
{

void RunAllTests ();

class TestBase
{
public:
	std::string SuiteIdentity ();
protected:
	TestBase ();
	~TestBase ();
	void RunSingle ();
protected:
	std::string command;
	KnowledgeBaseMemoryInterfacePtr memory;
	KnowledgeBaseInterpreterInterfacePtr interpreter;
	Factory < KnowledgeBaseElementInterface > elementsFactory;
};

class TestEmpty
: public TestBase
{
public:
	static void Run ();
	std::string TestIdentity ();
private:
	TestEmpty ();
	~TestEmpty ();
};

class TestAppend
: public TestBase
{
public:
	static void Run ();
	std::string TestIdentity ();
private:
	TestAppend ();
	~TestAppend ();
};

class TestMultipleAppend
: public TestBase
{
public:
	static void Run ();
	std::string TestIdentity ();
private:
	TestMultipleAppend ();
	~TestMultipleAppend ();
};

class TestInvalidMultipleAppend
: public TestBase
{
public:
	static void Run ();
	std::string TestIdentity ();
private:
	TestInvalidMultipleAppend ();
	~TestInvalidMultipleAppend ();
};

}; // namespace TestKnowledgeBaseInterpreter
